// #pragma once

// #include<iostream>

// class Task
// {
// public:
//     Task(int one = 0, int two = 0, char op = '0')
//         :elemOne_(one)
//         ,elemTwo_(two)
//         ,operator_(op)
//     {}

//     int operator() ()//仿函数
//     {
//         return run();
//     }

//     int run()
//     {
//         int result = 0;
//         switch(operator_)
//         {
//         case '+':
//             result = elemOne_ + elemTwo_;
//             break;
//         case '-':
//             result = elemOne_ - elemTwo_;
//             break;
//         case '*':
//             result = elemOne_ * elemTwo_;
//             break;
//         case '/':
//             if(elemTwo_ == 0)
//             {
//                 std::cerr << "div zero, abort" << std::endl;
//                 result = -1;
//             }
//             else
//             {
//                 result = elemOne_ / elemTwo_;
//             }
//         break;
//         case '%':
//             if(elemTwo_ == 0)
//             {
//                 std::cerr << "mod zero, abort" << std::endl;
//                 return -1;
//             }
//             else
//             {
//                 result = elemOne_ % elemTwo_;
//             }
//         break;
//         default:
//             std::cerr << "非法操作: " << operator_ << std::endl;
//             break;
//         }

//         return result;
//     }

//     int get(int* e1, int* e2, char* op)
//     {
//         *e1 = elemOne_;
//         *e2 = elemTwo_;
//         *op = operator_;
//     }

// private:
//     int elemOne_;
//     int elemTwo_;
//     char operator_;
// };

#pragma once

#include<iostream>
using namespace std;


class Task
{
public:
    Task(int one = 0, int two = 0, char op = '0')
        :elemOne_(one)
        ,elemTwo_(two)
        ,operator_(op)
    {}

    int operator() ()
    {
        return run();
    }

    int run()
    {
        int result = 0;
        switch(operator_)
        {
        case '+':
            result = elemOne_ + elemTwo_;
            break;
        case '-':
            result = elemOne_ - elemTwo_;
            break;
        case '*':
            result = elemOne_ * elemTwo_;
            break;
        case '/':
        {
            if(elemTwo_ == 0)
            {
                cerr << "div zero, abort" << endl;
                result = -1;
            }
            else
            {
                result = elemOne_ / elemTwo_;
            }
        }
        break;

        case '%':
        {
            if(elemTwo_ == 0)
            {
                cerr << "mod zero, abort" << endl;
                result = -1;
            }
            else
            {
                result = elemOne_ % elemTwo_;
            }
        }
        break;

        default:
            cerr << "非法操作: " << operator_ << endl;
            break; 
        }

        return result;
    }

    int get(int* e1, int* e2, char* op)
    {
        *e1 = elemOne_;
        *e2 = elemTwo_;
        *op = operator_;
    }

private:
    int elemOne_;
    int elemTwo_;
    char operator_;
};